/*
*防抖：防抖是指在事件触发n秒后在执行回调，如果在n秒内再次被触发，则重新计算时间
@param{function}fn 代表可能会频繁发生回调或ajax请求的函数
@param{number}delay 表示间隔多少毫秒才触发，默认100毫秒
*/
export function debounce(fn:Function,delay=200){//封装防抖函数触发是默认200
   let timer:NodeJS.Timeout|null=null//设置一个定时器为空
   return function(){
      if (timer) {//判断如果为空就启动定时器，在规定时间内再次点击就将定时器清除再重新开启，直到规定时间后再将定时器赋值为空
         clearTimeout(timer)
      }
      timer=setTimeout(()=>{
         fn.apply(fn,arguments)
         timer=null
      },delay)
   }
}

/*
*节流：节流是指如果持续触发某个事件每隔n秒只会触发一次
@param{function}fn 代表一个函数，里面可能会频繁发生回调或ajax请求
@param{number}delay 表示间隔多少毫秒才触发，默认200毫秒
*/

export function throttle(fn:Function,delay=100){//封装防抖函数触发是默认200
   let timer:NodeJS.Timeout|null=null//设置一个定时器为空
   return function(){
      if (timer) return////判断如果为空就启动定时器，当定时器有值时就直接返回，在规定时间内再次点击也不会触发，规定时间后再将定时器赋值为空
      timer=setTimeout(()=>{
         fn.apply(fn,arguments)//因为在闭包中this指向的window，我们需要指向当前执行的函数fn
         timer=null
      },delay)
   }
}
